2013-08-13 35 views
17

Tôi nhận được yêu cầu từ khách hàng rằng anh ấy muốn có thể nhập chuỗi truy vấn của dịch vụ web của tôi với thông số trong thanh địa chỉ IE10 và nhận kết quả dịch vụ. Các thông số bao gồm chuỗi bằng tiếng Hebrew, như:mã hóa tham số chuỗi truy vấn trong IE10

http://mywebsite.com/service.asmx/foo?param1=123&param2=מחרוזתבעברית 

Có vẻ với tôi rằng IE10 rằng, không giống như các trình duyệt khác (bình thường), sẽ không mã hóa các thông số chuỗi truy vấn - mỗi nhân vật phi ansi mà đi sau? đánh dấu sẽ được chuyển sang '3f' byte, mặc dù nó mã hóa những gì đi trước khi? đánh dấu - chính url đó.

Ví dụ, nếu tôi cố gắng để đạt được url (tham số là tưởng tượng, url không phải là, và tôi không có mối liên hệ với trang web)

http://www.shlomo.co.il/pageshe/sales/רכב-למכירה.asp?param=פאראם 

và tìm kiếm trong Wireshark cho các byte mà tôi gửi cho máy chủ, nó cho thấy tôi

wireshark output

Bạn có thể thấy nó thay thế phần hebrew của URL với chuỗi urlencoded, nhưng thay thế các thông số hebrew với ?????, đó là '3F của.

Chuỗi cùng trong chrome sẽ được mã hóa trong đó là toàn bộ:

GET http://www.shlomo.co.il/pageshe/sales/%D7%A8%D7%9B%D7%91-%D7%9C%D7%9E%D7%9B%D7%99%D7%A8%D7%94.asp?param=%D7%A4%D7%90%D7%A8%D7%90%D7%9D HTTP/1.1 

Tôi đã thử nó trên máy với win7/IE10 và winXPheb/IE8.

thiết lập

My IE được (đặc biệt là kiểm tra "tùy chọn địa chỉ luôn hiển thị mã hóa" để xem nếu nó giúp và khởi động lại, nhưng đã có sự khác biệt):

enter image description here

Tôi cố gắng để tìm kiếm xung quanh cho bất kỳ thông tin về vấn đề này, nhưng không tìm thấy nhiều.

Câu hỏi của tôi là:

  • là nó thực sự như thế này, hay tôi thiếu cái gì?
  • Hành vi này có được ghi lại ở bất kỳ đâu không?
  • Có bất kỳ cài đặt nào trong IE/Win cho phép mã hóa tham số hay không.

p.s. Chắc chắn nếu tôi phát triển client/web ui, tôi chỉ đơn giản là urlencode truy vấn của tôi, nhưng yêu cầu của tôi từ khách hàng chính xác là dán truy vấn vào thanh địa chỉ của IE, đó là lý do tại sao tôi quan tâm đến hành vi cụ thể này.

Cảm ơn.

Trả lời

18

Có, việc quan sát hành vi của bạn là chính xác. Internet Explorer 10 trở xuống tuân theo một thuật toán phức tạp để mã hóa URL. Điều này được cho là đã được cập nhật trong Internet Explorer 11, nhưng tôi thấy rằng tùy chọn mới doesn't seem to work.

Tùy chọn "Luôn hiển thị địa chỉ được mã hóa" liên quan đến việc PunyCode có được hiển thị cho tên máy chủ IDN hay không và không ảnh hưởng đến chuỗi truy vấn. Send UTF-8 URLs chủ yếu áp dụng cho việc mã hóa đường dẫn, mặc dù nó cũng có thể ảnh hưởng đến các hệ thống mã khác

Hành vi này không được ghi chép đầy đủ ở bất kỳ đâu.Tôi muốn viết một bài đăng đầy đủ trên blog IEInternals của tôi về nó nhưng cuối cùng đã chuyển từ Microsoft trước khi làm như vậy. Có một lời giải thích từng phần trong this blog post.

Có, có các cài đặt tác động đến hành vi. Hộp kiểm Send UTF-8 URLs bên trong Công cụ> Tùy chọn Internet> Nâng cao là một trong các biến xác định cách URL được gửi, nhưng tùy chọn không mù quáng làm điều nó ngụ ý (nó chỉ UTF-8 mã hóa đường dẫn chứ không phải chuỗi truy vấn). biến khác có liên quan bao gồm:

  1. đâu URL được gõ (ví dụ như thanh địa chỉ vs Start> Run, vv)
  2. gì bảng mã ANSI của hệ thống là (ví dụ như những gì Locale hệ điều hành sử dụng như mặc định)
  3. charset của trang hiện đang được nạp trong trình duyệt

Như một hệ quả của các biến này, bạn có thể không đáng tin cậy sử dụng URL mà không được mã hóa đúng cách (ví dụ% UTF8 -escaped) trong Internet Explorer.

+0

Đã chỉnh sửa câu hỏi cho phù hợp. Đã cho tôi thời gian để khởi động lại, nếu không tôi sẽ đánh dấu câu trả lời của bạn sớm hơn :) – alex440

+0

Câu hỏi hay và câu trả lời ở đây, mặc dù tôi đã thử IE 10 của Trình duyệt Stack và kiểm tra "Gửi URL UTF-8" đã xuất hiện để khắc phục sự cố. Tự hỏi liệu nó có đúng không? –

5

Đáng tiếc là điều này vẫn còn đúng đối với trình duyệt Internet Explorer 11 (xây dựng 11.0.9600.17358, win7-x64)

tôi thấy rằng bạn không thể không may thay đổi máy chủ web. Tuy nhiên, những người đang phát triển các dịch vụ mới có thể xem xét việc thay đổi các tham số yêu cầu thành các biến đường dẫn, ví dụ: từ http://myserver.com/page? τεστ vào http://myserver.com/τεστ/

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