2009-07-16 44 views
7

đây là những gì tôi đang cố gắng thực hiện.Truy cập 'localhost' của Khách hàng từ JavaScript Online

  1. Tôi đã tạo một vài trang .html có mã JavaScript trong đó và lưu trữ chúng trên máy chủ Yahoo.

  2. Bây giờ khi khách hàng có trình duyệt nhất định xem các trang web này, mã JavaScript sử dụng XMLHTTPRequest để thực hiện kết nối tại h1ttp: // localhost: 8080/myservlet/servlet1 để đọc một số dữ liệu.

  3. Tôi biết, tôi muốn kết nối với máy chủ web chạy trên máy tính của khách hàng nếu máy khách có một nghĩa là tôi đang sử dụng localhost trong xmlHTTPRequest của tôi.

Nhưng điều này không làm việc ngay cả khi một khách hàng có một web server chạy trên cổng 8080. Trên máy tính của khách hàng tôi có thể truy cập vào http://localhost:8080/mysevlet/servlet1 và servlet đang chạy tốt, nhưng qua trang .html lưu trữ trên Yahoo! máy chủ nó không hoạt động.

Mọi thứ tôi đang làm sai ở đây?

+3

nó không hoạt động, bởi vì nó không nên. – SilentGhost

+0

Tại sao điều này lại bị bỏ phiếu? Có vẻ như một câu hỏi hợp lệ với tôi. – MattC

+0

Trong tương lai, vui lòng đăng với tiêu đề câu hỏi cụ thể hơn. Tôi đã chỉnh sửa cái này cho bạn. –

Trả lời

2

Đây có phải là vấn đề về tên miền chéo không?

5

Do các hạn chế chính sách, trình duyệt không cho phép bạn gửi XMLHttpRequest đến các miền khác với tên miền lưu trữ trang web trong trường hợp của bạn là Yahoo.

6

Cross-site Scripting

Bạn không thể truy cập những gì không thuộc miền của bạn, trừ khi đó là một dịch vụ Web trở về XML hoặc JSONP

+2

Khi tôi thay đổi localhost thành http: // /sample.xml Tôi có thể đọc chính xác tệp XML ngay cả khi nó không được lưu trữ trên Yahoo. Vì vậy, tôi nghĩ rằng nó không phải là một vấn đề chữ thập. – user139123

1

Như những người khác đã nhận xét, điều này không làm việc vì mô hình bảo mật của trình duyệt.

Bạn có thể có thể thực hiện việc này với mục nhập trong tệp lưu trữ của bạn.

Đầu tiên, giả sử ứng dụng của bạn trên một tên miền yahoo.com, mở file host của bạn và thêm một mục nhập như thế này

127.0.0.1 mylocalhost.yahoo.com 

Sau đó, trong các trang của bạn, thay đổi thiết bị đầu cuối AJAX của bạn để http://mylocalhost.yahoo.com/myservlet/serverl1

Tôi đã không bao giờ thử nghiệm này, vì vậy tôi không thể chắc chắn nó sẽ làm việc, nhưng nó có thể. Nếu nó không làm việc, mỗi người dùng của trang này sẽ cần phải sửa đổi file host của họ như trên

Lưu ý: file host của bạn nên được đặt tại C:\WINDOWS\system32\drivers\etc\hosts trong các cửa sổ, và tại /etc/hosts trong * nix

+1

Tôi không nghĩ rằng sẽ làm việc. Máy chủ phải chính xác giống với XMLHTTPRequest để hoạt động. Các trang được tải từ http; // www.example.com không thể truy cập http; // foo.example.com, http; // example.com:8080 hoặc https; // example.com. Có một số thủ thuật bạn có thể chơi với document.domain và iframe, nhưng chúng không đẹp. –

0

Các địa phương máy cũng cần một proxy được thiết lập để ánh xạ "http://localhost:8080/whatever" tới các trang yahoo bằng mã Ajax của bạn. Để mã hoạt động, bạn phải tải mã trong trình duyệt bằng tên miền giống như miền mà nó cố truy cập.

Tôi không chắc chắn cách thực hiện việc này với Tomcat (?), Nhưng một tùy chọn là sử dụng Apache để ủy quyền cả máy chủ Tomcat và các trang Yahoo vào cùng một vị trí.

Trong Apache, điều này có vẻ như:

LoadModule proxy_module modules/mod_proxy.so 
LoadModule proxy_http_module modules/mod_proxy_http.so 
... 
<IfModule proxy_http_module> 
    ProxyRequests off 
    ProxyPass /static http://yahoo.com/path 
    ProxyPass /myservlet http://localhost:8080/myservlet 
</IfModule> 

Sau đó, bạn sẽ nạp HTML của bạn từ localhost/tĩnh, và các trang sẽ có thể đưa ra yêu cầu AJAX với localhost/myservlet.

Các vấn đề liên quan